iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
AI/ ML & Data

粗暴的資料處理 DuckDB系列 第 9

Day09 -- DuckDB Style SQL (3) ?

  • 分享至 

  • xImage
  •  

昨天提到 GROUP BY ALL 讓我們在做資料聚合時更加方便,今天我們來看另一個類似的概念

ORDER BY ALL

ORDER BY ALL 這個功能是為了讓 SQL 的排序過程更加直覺且簡單。一般來說,當我們需要排序結果時,會在 ORDER BY 子句中明確列出每一個需要排序的欄位,例如:

SELECT department, sum(salary)
FROM  'https://ironman24.douenergy.com/employees.parquet'
GROUP BY ALL
ORDER BY  department, sum(salary)

而使用 ORDER BY ALL 的話,則不需要手動指定排序欄位。它會自動根據 SELECT 子句中的欄位順序(從左到右)進行排序:

SELECT department, sum(salary)
FROM  'https://ironman24.douenergy.com/employees.parquet'
GROUP BY ALL
ORDER BY ALL;
-- ORDER BY  department, sum(salary)

GROUP BY ALL 跟 ORDER BY ALL 是一個我常常在寫簡單的 aggreate 必用的 combo 之一。

ORDER BY ALL vs. ORDER BY 1, 2

我們可以深入探討一下為什麼 ORDER BY ALL 比傳統的 ORDER BY 1, 2 更加方便。實務上,我們常常會調整 SELECT 子句中的欄位順序,或者增加或刪減欄位。當你使用 ORDER BY 1, 2 時,每次改變 SELECT 子句後,都需要在 ORDER BY 子句中做相對應的修改,以確保排序結果是符合預期的。

但使用 ORDER BY ALL,就不需要這樣的額外修改,排序會自動隨著 SELECT 子句的變動來調整。

ORDER BY ALL 的限制

當然,ORDER BY ALL 也有其限制。當你使用它時,就無法對每個欄位單獨指定排序方向(升冪或降冪)。換句話說,使用 ORDER BY ALL 時,指定的排序方向(例如 DESC 或 ASC)會應用到所有欄位。如果你想要混合排序方向(如 ORDER BY 1 DESC, 2 ASC),那麼 ORDER BY ALL DESC 就無法實現這種效果,因為它會對所有選定的欄位應用相同的排序方式。

總的來說,ORDER BY ALL 是一個方便的工具,特別是在頻繁修改 SELECT 子句時,它能幫助我們避免手動同步更新 ORDER BY 子句。趕快到 DuckDB WASM 或 Colab 試試看吧!


上一篇
Day08 -- DuckDB Style SQL (2) ?
下一篇
Day10 -- DuckDB Style SQL (4) ?
系列文
粗暴的資料處理 DuckDB13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言